From 66fc6a5fb292d78fe2582b77b54ff2fa24cf8a25 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Sun, 17 Feb 2008 10:11:11 +0000 Subject: [PATCH] Update the position after showing the window since the window manager 2008-02-17 Richard Hult * gdk/quartz/GdkQuartzWindow.c: (showAndMakeKey): Update the position after showing the window since the window manager might not place it where we requested in the first places. svn path=/trunk/; revision=19605 --- ChangeLog | 6 ++++++ gdk/quartz/GdkQuartzWindow.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/ChangeLog b/ChangeLog index 731fa6b501..dee6725240 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-02-17 Richard Hult + + * gdk/quartz/GdkQuartzWindow.c: (showAndMakeKey): Update the + position after showing the window since the window manager might + not place it where we requested in the first places. + 2008-02-17 Richard Hult * gdk/quartz/gdkwindow-quartz.c: (show_window_internal), diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c index e8aca4c298..95cf028567 100644 --- a/gdk/quartz/GdkQuartzWindow.c +++ b/gdk/quartz/GdkQuartzWindow.c @@ -270,14 +270,19 @@ GdkWindow *window = [[self contentView] gdkWindow]; GdkWindowObject *private = (GdkWindowObject *)window; GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl); + gboolean was_hidden; + int requested_x = 0, requested_y = 0; inShowOrHide = YES; + was_hidden = FALSE; if (!GDK_WINDOW_IS_MAPPED (window)) { NSRect content_rect; NSRect frame_rect; + was_hidden = TRUE; + /* We move the window in place if it's not mapped. See comment in * hide(). */ @@ -287,6 +292,9 @@ impl->width, impl->height); frame_rect = [impl->toplevel frameRectForContentRect:content_rect]; [impl->toplevel setFrame:frame_rect display:NO]; + + requested_x = frame_rect.origin.x; + requested_y = frame_rect.origin.y; } if (makeKey) @@ -295,6 +303,20 @@ [impl->toplevel orderFront:nil]; inShowOrHide = NO; + + /* When the window manager didn't allow our request, update the position + * to what it really ended up as. + */ + if (was_hidden) + { + NSRect frame_rect; + + frame_rect = [impl->toplevel frame]; + if (requested_x != frame_rect.origin.x || requested_y != frame_rect.origin.y) + { + [self windowDidMove:nil]; + } + } } - (void)hide @@ -422,6 +444,7 @@ } + static GdkDragContext *current_context = NULL; static GdkDragAction -- 2.30.2